/**
 * @file CommonTypes.h
 * @brief Common type definitions for economic simulation
 */

#pragma once

#include <string>
#include <vector>

/**
 * @enum AgentType
 * @brief Classification of economic agent roles
 */
enum class AgentType {
    CONSUMER,      ///< Consumption-driven agents
    PRODUCER,     ///< Production-focused agents
    INVESTOR,     ///< Capital management agents
    GOVERNMENT    ///< Policy-making agents
};

/**
 * @enum AgentState
 * @brief Operational states of agents
 */
enum class AgentState {
    IDLE,        ///< No active task
    WORKING,     ///< Performing economic activities  
    LEARNING,    ///< Updating knowledge model
    SOCIALIZING, ///< Interacting with peers
    RESTING      ///< Recovery state
};

/**
 * @struct MarketConditions  
 * @brief Current economic environment state
 */
struct MarketConditions {
    double priceLevel;      ///< General price index
    double inflationRate;   ///< Annual inflation percentage
    double interestRate;   ///< Central bank rate
    double unemploymentRate; ///< Labor market metric
    double tradeBalance;   ///< Net export value
};

/**
 * @struct AgentGoal
 * @brief Agent's objective specification
 */
struct AgentGoal {
    std::string description; ///< Goal description
    double priority;        ///< Priority weight (0.0-1.0)
    double progress;        ///< Completion status (0.0-1.0)
};

/**
 * @struct Memory
 * @brief Record of agent experiences
 */
struct Memory {
    std::string event;   ///< Event description
    double value;        ///< Associated value impact  
    long timestamp;      ///< When occurred
};